package com.itany.annotation;

import java.lang.annotation.*;

/**
 * Author:石小俊
 * Date: 2022/11/2 16:53
 */
// 标注在注解上的注解,称之为元注解
// @Target: 该注解用于定义当前注解的作用于
// 表示当前注解可以添加在什么地方
// 通过value属性指定注解应用的位置
// 其值是一个枚举类型,通过ElementType选择应用的位置
//@Target(value = {ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
//@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
//@Target(ElementType.TYPE)
// @Retention: 定义注解的生命周期,通过value属性取值
// value属性值是一个枚举类型RetentionPolicy
//@Retention(value = RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
// @Documented
// @Inherited
public @interface SomeAnnotation {

    // 在使用注解的时候,可以传入一些属性值
    // 这些属性值的属性名,对应的是注解中的抽象方法
    // 这些抽象方法必须无参无异常
    // 可以通过default为这些属性设置默认值
    // 当引用注解时,需要为这些属性赋值
    // 当开发者未赋值时,则使用这些默认值
    // 当开发者为属性赋值了, 则使用开发设置的值

    String username() default "admin";
    String[] value() default {"hello","world"};
    int age() default 20;

}
